/*
 * Copyright 2012-present the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.commons.security;

/**
 * Convenience class for relaying an access token from the {@link SecurityContext} to the
 * {@link OAuth2ClientContext}. If successful then subsequent calls to an
 * {@link OAuth2RestTemplate} using the context contained here will use the same access
 * token. This is mostly useful for relaying calls to a resource server downstream to
 * other resource servers. If the access token expires there is no way to refresh it, so
 * expect an exception from downstream (propagating it to the caller is the best strategy,
 * so they can refresh it and try again).
 *
 * @author Dave Syer
 *
 */
public class AccessTokenContextRelay {

	/*
	 * private OAuth2ClientContext context;
	 *
	 * public AccessTokenContextRelay(OAuth2ClientContext context) { this.context =
	 * context; }
	 *
	 *//**
		 * Attempt to copy an access token from the security context into the oauth2
		 * context.
		 * @return true if the token was copied
		 *//*
			 * public boolean copyToken() { if (context.getAccessToken() == null) {
			 * Authentication authentication =
			 * SecurityContextHolder.getContext().getAuthentication(); if (authentication
			 * != null) { Object details = authentication.getDetails(); if (details
			 * instanceof OAuth2AuthenticationDetails) { OAuth2AuthenticationDetails
			 * holder = (OAuth2AuthenticationDetails) details; String token =
			 * holder.getTokenValue(); DefaultOAuth2AccessToken accessToken = new
			 * DefaultOAuth2AccessToken(token); String tokenType = holder.getTokenType();
			 * if (tokenType != null) { accessToken.setTokenType(tokenType); }
			 * context.setAccessToken(accessToken); return true; } } } return false; }
			 */

}
